package forms;

import helpers.DateHelper;
import helpers.StringHelper;
import helpers.ValidateHelper;

import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import data.UserData;

import models.UserModel;

public class UserForm {
	public TreeMap checkValid(HttpServletRequest request, UserModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();

		String username = (String) request.getParameter("username").toLowerCase();
		String password = (String) request.getParameter("password");
		String repassword = (String) request.getParameter("repassword");
		String name = (String) request.getParameter("name");
		String gender = (String) request.getParameter("gender");
		String birthday = (String) request.getParameter("birthday");
		String city = (String) request.getParameter("city");
		String district = (String) request.getParameter("district");
		String ward = (String) request.getParameter("ward");
		String address = (String) request.getParameter("address");
		String street = (String) request.getParameter("street");
		String phone = (String) request.getParameter("phone");

		
		
		if (username == null || username.isEmpty()) {
			check.put("username", "Bạn chưa nhập thông tin email.");
			user.setUsername("");
		} else {
			// Check user exists
			UserData userData = new UserData();
			if (userData.checkUserExists(username)) {
				check.put("username",
						"Email đã được đăng ký sử dụng trước đó. Vui lòng chọn hòm thư khác.");
			} else {
				Pattern p = Pattern
						.compile("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
				Matcher m = p.matcher(username);
				if (!m.matches()) {
					check.put("username", "Email không hợp lệ.");
				}
			}
			user.setUsername(username);
		}

		if (name == null || name.isEmpty()) {
			check.put("name", "Bạn chưa nhập tên.");
			user.setName(name);
		} else {
			user.setName(name);
		}

		if (gender != null) {
			try {
				user.setGender(Integer.parseInt(gender));
			} catch (Exception e) {
				check.put("gender", "Giới tính không hợp lệ!");
			}
		}

		if (password == null || password.isEmpty()) {
			check.put("password", "Mật khẩu không được để trống.");
			user.setPassword("");
		} else {
			if (repassword == null || repassword.isEmpty()) {
				check.put("repassword",
						"Xác nhận mật khẩu không được bỏ trống.");
				user.setRePassword("");
			} else if (!password.equalsIgnoreCase(repassword)) {
				check.put("repassword",
						"Mật khẩu và xác nhận mật khẩu không giống nhau. Xin vui lòng nhập lại.");
				user.setRePassword(repassword);
			}
			user.setPassword(password);
			user.setRePassword(repassword);
		}

		if (birthday != null && !birthday.isEmpty() && !DateHelper.isValidDate(birthday)) {
			check.put("birthday", "Ngày sinh không hợp lệ.");
			user.setBirthday(DateHelper.StringToDate(birthday, "yyyy-MM-dd"));
		} else {
			//user.setBirthday(DateHelper.StringToDate(birthday, "yyyy-MM-dd"));
		}

		
		if (city == null || city.isEmpty()) {
			check.put("city", "Bạn chưa chọn tỉnh/thành phố.");
			user.setCity("");
		} else {
			user.setCity(city);
		}

		if (district != null) {
			user.setDistrict(district);
		}

		if (ward != null) {
			user.setWard(ward);
		}

		if (address != null) {
			user.setAddress(address);
		}

		if (street != null) {
			user.setStreet(street);
		}

		if (phone == null || phone.isEmpty()) {
			check.put("phone", "Bạn chưa nhập số điện thoại.");
			user.setPhone("");
		} else if (!ValidateHelper.isPhoneNumber(phone)) {
			check.put("phone", "Số điện thoại bạn nhập chưa đúng, Số điện thoại phải có định dạng 09xxxxxxxx hoặc 01xxxxxxxxx");
			user.setPhone(phone);
		} else {
			user.setPhone(phone);
		}

		form.put("checkValid", check);
		form.put("user", user);

		return form;
	}

	public TreeMap checkLogin(HttpServletRequest request, UserModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();

		String username = (String) request.getParameter("email").toLowerCase();
		String password = (String) request.getParameter("password");

		if (username == null || username.isEmpty()) {
			check.put("email", "Bạn chưa nhập thông tin email.");
			user.setUsername("");
		} else {
			user.setUsername(username);
		}

		if (password == null || password.isEmpty()) {
			check.put("password", "Bạn chưa nhập thông tin mật khẩu.");
			user.setPassword("");
		} else {
			user.setPassword(password);
		}

		form.put("checkValid", check);
		form.put("user", user);

		return form;
	}

	public TreeMap checkValidProfile(HttpServletRequest request, UserModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();

		String password = (String) request.getParameter("password");
		String repassword = (String) request.getParameter("repassword");
		String name = (String) request.getParameter("name");
		String gender = (String) request.getParameter("gender");
		String birthday = (String) request.getParameter("birthday");
		String city = (String) request.getParameter("city");
		String district = (String) request.getParameter("district");
		String ward = (String) request.getParameter("ward");
		String address = (String) request.getParameter("address");
		String street = (String) request.getParameter("street");
		String phone = (String) request.getParameter("phone");

		if (name == null || name.isEmpty()) {
			check.put("name", "Bạn chưa nhập tên.");
			user.setName(name);
		} else {
			user.setName(name);
		}

		if (gender != null) {
			try {
				user.setGender(Integer.parseInt(gender));
			} catch (Exception e) {
				check.put("gender", "Giới tính không hợp lệ!");
			}
		}

		if (!password.equalsIgnoreCase("12345678")
				|| repassword.equalsIgnoreCase("12345678")) {
			if (password == null || password.isEmpty()) {
				check.put("password", "Mật khẩu không được để trống.");
				user.setPassword("");
			} else {
				if (repassword == null || repassword.isEmpty()) {
					check.put("repassword",
							"Xác nhận mật khẩu không được bỏ trống.");
					user.setRePassword("");
				} else if (!password.equalsIgnoreCase(repassword)) {
					check.put("repassword",
							"Mật khẩu và xác nhận mật khẩu không giống nhau. Xin vui lòng nhập lại.");
					user.setRePassword(repassword);
				}
				user.setPassword(password);
				user.setRePassword(repassword);
			}
		} else {
			user.setPassword(password);
			user.setRePassword(repassword);
		}

		if (birthday != null && !DateHelper.isValidDate(birthday)) {
			check.put("birthday", "Ngày sinh không hợp lệ.");
			user.setBirthday(DateHelper.StringToDate(birthday, "yyyy-MM-dd"));
		} else {
			//user.setBirthday(DateHelper.StringToDate(birthday, "yyyy-MM-dd"));
		}

		if (city != null) {
			user.setCity(city);
		}

		if (district != null) {
			user.setDistrict(district);
		}

		if (ward != null) {
			user.setWard(ward);
		}

		if (address != null) {
			user.setAddress(address);
		}

		if (street != null) {
			user.setStreet(street);
		}

		if (phone == null || phone.isEmpty()) {
			check.put("phone", "Bạn chưa nhập số điện thoại.");
			user.setPhone("");
		} else if (!ValidateHelper.isPhoneNumber(phone)) {
			check.put("phone", "Số điện thoại bạn nhập chưa đúng, Số điện thoại phải có định dạng 09xxxxxxxx hoặc 01xxxxxxxxx");
			user.setPhone(phone);
		} else {
			user.setPhone(phone);
		}

		form.put("checkValid", check);
		form.put("user", user);

		return form;
	}

	public TreeMap checkValidPassword(HttpServletRequest request, UserModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();

		String oldPassword = (String) request.getParameter("oldpassword");
		String password = (String) request.getParameter("password");
		String repassword = (String) request.getParameter("repassword");

		if (!StringHelper.md5(oldPassword).equalsIgnoreCase(user.getPassword())) {
			check.put("oldpassword", "Mật khẩu cũ không đúng.");
		} else if (password == null || password.isEmpty()) {
			check.put("password", "Bạn chưa nhập mật khẩu.");
			password = "";
		} else {
			if (repassword == null || repassword.isEmpty()) {
				check.put("repassword", "Bạn chưa nhập xác nhận mật khẩu.");
				repassword = "";
			} else if (!password.equalsIgnoreCase(repassword)) {
				check.put("repassword",
						"Mật khẩu và xác nhận mật khẩu không giống nhau. Xin vui lòng nhập lại.");
			}
		}
		user.setPassword(password);
		user.setOldPassword(oldPassword);
		user.setRePassword(repassword);

		form.put("checkValid", check);
		form.put("user", user);

		return form;
	}	
	
	public TreeMap checkValidResetPassword(HttpServletRequest request, UserModel user) {
		TreeMap form = new TreeMap();
		TreeMap check = new TreeMap();
		
		String password = (String) request.getParameter("password");
		String repassword = (String) request.getParameter("repassword");
		
		if (password == null || password.isEmpty()) {
			check.put("password", "Bạn chưa nhập mật khẩu.");
			password = "";
		} else {
			if (repassword == null || repassword.isEmpty()) {
				check.put("repassword", "Bạn chưa nhập xác nhận mật khẩu.");
				repassword = "";
			} else if (!password.equalsIgnoreCase(repassword)) {
				check.put("repassword",
						"Mật khẩu và xác nhận mật khẩu không giống nhau. Xin vui lòng nhập lại.");
			}
		}
		
		user.setPassword(password);
		user.setRePassword(repassword);
		
		form.put("checkValid", check);
		form.put("user", user);

		return form;
	}
}
